/**
 * Copyright (c) 2015-2018,Retire 吴益峰 (372310383@qq.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package cn.hg.jbsa.shiro;

import org.apache.shiro.authc.AccountException;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

import cn.hg.jboot.core.vo.BaseResponseVo;
import cn.hg.jbsa.admin.model.JbsaAdmin;
import cn.hg.jbsa.admin.provider.JbsaShiroServiceProvider;
import cn.hg.jbsa.admin.service.JbsaShiroService;

/**
 * Created by Administrator on 2017/12/29.
 */
public class JbsaAuthRealm extends AuthorizingRealm {

    private JbsaShiroService shiroService = new JbsaShiroServiceProvider();

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
        throws AuthenticationException {

        UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken;
        BaseResponseVo<JbsaAdmin> response =
            this.shiroService.shiroLogin(token.getUsername(), new String(token.getPassword()));

        if (!response.isSuccess()) {
            throw new AccountException(response.getMessage());
        }

        return new SimpleAuthenticationInfo(response.getData(), new String(token.getPassword()), token.getUsername());
    }

    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        return this.shiroService.buildAuthorizationInfo(principals);
    }

}
